#include <iostream>
#include <algorithm>
using namespace std;
const int N = 3030;
int g[N][N], h[N][N];
int n, m, p;
int l[N], r[N];
int st[N], idx = -1;

int work(int h[])
{
    // 从当前位置向左找第一个比当前高度低的值
    h[0] = -1, h[m + 1] = -1;
    st[++idx] = 0;
    // 为了免去如果当前高度是0时无左边界的特判，在最左边加上一个-1，最右边加上一个-1
    for(int i = 1; i <= m; ++i)
    {
        // cout << h[i] << ' ';
        while(idx != -1 && h[st[idx]] >= h[i]) --idx; // 出栈
        l[i] = st[idx];
        st[++idx] = i;
    }
    // cout << endl;
    idx = 0;
    st[idx] = m + 1;
    for(int i = m; i > 0; --i)
    {
        while(idx != -1 && h[st[idx]] >= h[i]) --idx;
        r[i] = st[idx];
        st[++idx] = i;
    }
    // 处理答案
    int res = 0;
    for(int i = 1; i <= m; ++i)
        res = max(res, h[i] * (r[i] - l[i] - 1));
        
    return res;
}

int main()
{
    cin >> n >> m >> p;
    while(p--)
    {
        int x, y;
        cin >> x >> y;
        g[x][y] = 1;
    }
    // 利用动态规划的思想预处理每一行边界上每一列的最大连续高度
    for(int i = 1; i <= n; ++i)
        for(int j = 1; j <= m; ++j)
            if(!g[i][j])
                h[i][j] = h[i - 1][j] + 1;
    int res = 0;
    // 枚举每一行，判断每一行上的最大矩形面积
    for(int i = 1; i <= n; ++i)
        res = max(res, work(h[i]));
    cout << res << endl;
    return 0;
}